

package jumavidesktop.Persistencia.Dao;

import javax.persistence.EntityTransaction;
import jumavidesktop.Otros.Pojos.MyRespuesta;

/**
 *Clase envolvente de transacciones de jpa, me es util por que aqui controla el tema de cuando abrir la transaccion 
 * y hacerle commit y rollback dependiento si a la hora de contruir ya estaba una transacción en curso
 * @author vimso
 */
public class WrapperTransaction {
    

    private final EntityTransaction tx;
    private boolean  estabaAbierta;

    public WrapperTransaction(EntityTransaction tx) {
        this.tx = tx;
        if (this.tx.isActive()) {
            this.estabaAbierta=true;
        }
    }
    
    private EntityTransaction getTx() {
        return tx;
    }

    private boolean isEstabaAbierta() {
        return estabaAbierta;
    }

    private void setEstabaAbierta(boolean estabaAbierta) {
        this.estabaAbierta = estabaAbierta;
    }
    
    //<editor-fold defaultstate="expanded" desc="Métodos transaccionales">
    
    public void begin()
    {
        if (!estabaAbierta) {
            this.tx.begin();    
        }        
    }
    
    public void commit()
    {
        if (!estabaAbierta && this.tx.isActive()) {
            this.tx.commit();    
        }        
    }
    
    public void rollback()
    {
            if (this.tx.isActive()) {
                this.tx.rollback();
        }
    }
    
    public void terminaTransaccion(MyRespuesta respuesta)
    {
        if (respuesta.getTodoOK()) {
            this.commit();
        } else {
            this.rollback();
        }
        
    }
    //</editor-fold>
}
